Telegram Group & Telegram Channel
🐍 Задача с подвохом: mutable default arguments в Python

🔹 Уровень: Advanced
🔹 Темы: изменяемые аргументы по умолчанию, функции, ловушки с list и dict

📌 Условие

Что выведет следующий код?


def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list

print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))


Вопросы

1. Почему результат выглядит неожиданно?
2. Как исправить это поведение?
3. Когда стоит использовать изменяемые аргументы по умолчанию — если вообще стоит?

🔍 Разбор

Ожидаемый вывод:

[1]
[1, 2]
[1, 2, 3]


🔧 Почему так происходит

- Аргументы по умолчанию вычисляются один раз — во время определения функции, а не при каждом вызове.
- Значение my_list=[] создаётся один раз и затем используется повторно при всех вызовах.
- Все вызовы append_to_list изменяют один и тот же список.

⚠️ Подвох

Это один из самых коварных багов в Python, особенно среди начинающих — кажется, что my_list должен быть новым на каждый вызов, но это не так.

🧠 Вывод

- Никогда не используй изменяемые типы (list, dict, set) как значения по умолчанию.
- Вместо этого используй None и создавай новый объект вручную:


def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list


Тогда вывод будет:

[1]
[2]
[3]


📌 Это правило относится ко всем изменяемым типам: [], {}, set() и кастомные классы.

@Python_Community_ru



tg-me.com/Python_Community_ru/2619
Create:
Last Update:

🐍 Задача с подвохом: mutable default arguments в Python

🔹 Уровень: Advanced
🔹 Темы: изменяемые аргументы по умолчанию, функции, ловушки с list и dict

📌 Условие

Что выведет следующий код?


def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list

print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))


Вопросы

1. Почему результат выглядит неожиданно?
2. Как исправить это поведение?
3. Когда стоит использовать изменяемые аргументы по умолчанию — если вообще стоит?

🔍 Разбор

Ожидаемый вывод:

[1]
[1, 2]
[1, 2, 3]


🔧 Почему так происходит

- Аргументы по умолчанию вычисляются один раз — во время определения функции, а не при каждом вызове.
- Значение my_list=[] создаётся один раз и затем используется повторно при всех вызовах.
- Все вызовы append_to_list изменяют один и тот же список.

⚠️ Подвох

Это один из самых коварных багов в Python, особенно среди начинающих — кажется, что my_list должен быть новым на каждый вызов, но это не так.

🧠 Вывод

- Никогда не используй изменяемые типы (list, dict, set) как значения по умолчанию.
- Вместо этого используй None и создавай новый объект вручную:


def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list


Тогда вывод будет:

[1]
[2]
[3]


📌 Это правило относится ко всем изменяемым типам: [], {}, set() и кастомные классы.

@Python_Community_ru

BY Python Community


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/Python_Community_ru/2619

View MORE
Open in Telegram


Python Community Telegram | DID YOU KNOW?

Date: |

What is Secret Chats of Telegram

Secret Chats are one of the service’s additional security features; it allows messages to be sent with client-to-client encryption. This setup means that, unlike regular messages, these secret messages can only be accessed from the device’s that initiated and accepted the chat. Additionally, Telegram notes that secret chats leave no trace on the company’s services and offer a self-destruct timer.

What is Telegram Possible Future Strategies?

Cryptoassets enthusiasts use this application for their trade activities, and they may make donations for this cause.If somehow Telegram do run out of money to sustain themselves they will probably introduce some features that will not hinder the rudimentary principle of Telegram but provide users with enhanced and enriched experience. This could be similar to features where characters can be customized in a game which directly do not affect the in-game strategies but add to the experience.

Python Community from ms


Telegram Python Community
FROM USA